package tools

import (
	"crypto/hmac"
	"crypto/md5"
	"crypto/sha1"
	"encoding/hex"
	"fmt"

	"github.com/google/uuid"
)

// Sign 生成签名
func Sign(appID, appSec string, dateStr string) string {
	str := fmt.Sprintf("%s%s", appID, dateStr)
	hex := Md5Data([]byte(str), nil)
	return HmacSha1(hex, appSec)
}

// Md5Data md5 加密数据
func Md5Data(data []byte, sec []byte) string {
	h := md5.New()
	h.Write(data)
	return fmt.Sprintf("%x", h.Sum(sec))
}

// HmacSha1 加密数据
func HmacSha1(key, sec string) string {
	mac := hmac.New(sha1.New, []byte(sec))
	mac.Write([]byte(key))
	return fmt.Sprintf("%x", mac.Sum(nil))
}

// GenAppSecret 生成 app Secret
func GenAppSecret(appID string) string {
	return uuid.New().String()
}

// Md5DataString Md5加密
func Md5DataString(str string) string {
	h := md5.New()
	h.Write([]byte(str))
	return hex.EncodeToString(h.Sum(nil))
}
